]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspace: Move fading minimized windows out of allocation
authorSebastian Keller <skeller@gnome.org>
Thu, 19 Aug 2021 18:58:31 +0000 (20:58 +0200)
committerMarge Bot <marge-bot@gnome.org>
Wed, 1 Sep 2021 15:02:47 +0000 (15:02 +0000)
eee2ccac fixed window opacity being changed outside of transitions but
resulted in the final step of the transition, that would set the window
to fully opaque, being missed.

This change now moves the opacity change entirely out of allocation and
instead follows the adjustment changes directly, which still fixes the
original bug and ensures the opacity is also applied for the last step
in the transition.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4561
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1957>

js/ui/workspace.js

index 79d6cf146b4a5f7f775f7818b0a5f865dc05a772..6c32f01da9bc5fd5d74d39f7014dede38027f460 100644 (file)
@@ -429,6 +429,7 @@ var WorkspaceLayout = GObject.registerClass({
         });
 
         this._stateAdjustment.connect('notify::value', () => {
+            this._syncOpacities();
             this.syncOverlays();
             this.layout_changed();
         });
@@ -437,6 +438,17 @@ var WorkspaceLayout = GObject.registerClass({
         this._workareasChangedId = 0;
     }
 
+    _syncOpacity(actor, metaWindow) {
+        if (!metaWindow.showing_on_its_workspace())
+            actor.opacity = this._stateAdjustment.value * 255;
+    }
+
+    _syncOpacities() {
+        this._windows.forEach(({ metaWindow }, actor) => {
+            this._syncOpacity(actor, metaWindow);
+        });
+    }
+
     _isBetterScaleAndSpace(oldScale, oldSpace, scale, space) {
         let spacePower = (space - oldSpace) * LAYOUT_SPACE_WEIGHT;
         let scalePower = (scale - oldScale) * LAYOUT_SCALE_WEIGHT;
@@ -627,7 +639,7 @@ var WorkspaceLayout = GObject.registerClass({
         }
 
         const { ControlsState } = OverviewControls;
-        const { currentState, transitioning } =
+        const { currentState } =
             this._overviewAdjustment.getStateTransitionParams();
         const inSessionTransition = currentState <= ControlsState.WINDOW_PICKER;
 
@@ -689,9 +701,6 @@ var WorkspaceLayout = GObject.registerClass({
                 workspaceBoxY = workareaY * allocationScale;
                 workspaceBoxWidth = 0;
                 workspaceBoxHeight = 0;
-
-                if (transitioning)
-                    child.opacity = stateAdjustementValue * 255;
             }
 
             // Don't allow the scaled floating size to drop below
@@ -792,6 +801,7 @@ var WorkspaceLayout = GObject.registerClass({
             return winA.get_stable_sequence() - winB.get_stable_sequence();
         });
 
+        this._syncOpacity(window, metaWindow);
         this._syncOverlay(window);
         this._container.add_child(window);